gusucode.com > 各种VC自绘控件源码程序 > 各种VC自绘控件源码/code/SkinControls(自绘MFC基本控件 )/SkinControls/SkinControls/SkinUICheckBox.cpp
#include "StdAfx.h" #include "SkinUICheckBox.h" #include "SkinUIWnd.h" CSkinUICheckBox::CSkinUICheckBox(void) : m_bCheck(false) { m_uTextFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; } CSkinUICheckBox::~CSkinUICheckBox(void) { } LPCTSTR CSkinUICheckBox::GetClass() const { return TEXT("SkinUICheckBox"); } void CSkinUICheckBox::PaintText(CDC * pDC) { if (!IsVisible()) return; pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,0,0)); pDC->SelectObject(m_pFont); CRect rcText = m_rcItem; rcText.left += m_ImageStatus.GetWidth()/8+4; pDC->DrawText(m_strText, &rcText, m_uTextFormat); } void CSkinUICheckBox::PaintStatusImage(CDC * pDC) { if (!IsVisible()) return; int nButtonWidth = m_ImageStatus.GetWidth()/8; int nButtonHeight = m_ImageStatus.GetHeight(); m_ImageStatus.Draw(pDC->m_hDC, m_rcItem.left, m_rcItem.top, nButtonWidth, nButtonHeight, (m_bCheck?(m_byStatus+4):(m_byStatus)) * nButtonWidth, 0, nButtonWidth, nButtonHeight); } //操作相关 void CSkinUICheckBox::MouseMove(const CPoint & point) { if ((IsVisible() == false) || (IsEnabled() == false)) return; if ((m_Rgn.PtInRegion(point) == TRUE) && (!m_bNeedInvalidate) && (!m_bLButtonDown)) { m_byStatus = 1; m_pParentWnd->InvalidateRect(&m_rcItem, FALSE); } else if (m_Rgn.PtInRegion(point) == FALSE) { m_byStatus = 0; m_bNeedInvalidate = false; m_pParentWnd->InvalidateRect(&m_rcItem, FALSE); } } void CSkinUICheckBox::MouseLeave() { if ((IsVisible() == false) || (IsEnabled() == false)) return; if (m_byStatus != 0) { m_byStatus = 0; m_pParentWnd->InvalidateRect(&m_rcItem, FALSE); } } void CSkinUICheckBox::MouseLButtonDown(const CPoint & point) { if ((IsVisible() == false) || (IsEnabled() == false)) return; if ((m_Rgn.PtInRegion(point) == TRUE) ) { m_bLButtonDown = true; m_pParentWnd->SetCapture(); m_byStatus = 2; m_pParentWnd->InvalidateRect(&m_rcItem, FALSE); } } void CSkinUICheckBox::MouseLButtonUp(const CPoint & point) { if ((IsVisible() == false) || (IsEnabled() == false)) return; ReleaseCapture(); if ((m_Rgn.PtInRegion(point) == TRUE) && m_bLButtonDown) { m_byStatus = 0; SetCheck(!m_bCheck); m_pParentWnd->LButtonClickListener(GetName()); } m_bLButtonDown = false; } BOOL CSkinUICheckBox::MouseCursor(const CPoint & point) { return FALSE; } void CSkinUICheckBox::SetEnabled(bool bEnable) { m_bEnabled = bEnable; m_byStatus = !bEnable ? 3 : 0; } void CSkinUICheckBox::SetImage(LPCTSTR pszFileName, DWORD imageType) { m_ImageStatus.Load(pszFileName, imageType); } void CSkinUICheckBox::SetPos(const CRect & rc) { m_rcItem = rc; m_Rgn.SetRectRgn(&m_rcItem); } void CSkinUICheckBox::SetPos(int x, int y, int cx, int cy) { m_rcItem.left = x; m_rcItem.top = y; m_rcItem.right = m_rcItem.left + cx; m_rcItem.bottom = m_rcItem.top + cy; m_Rgn.SetRectRgn(&m_rcItem); } void CSkinUICheckBox::SetCheck(bool bCheck /* = true */) { m_bCheck = bCheck; m_pParentWnd->InvalidateRect(&m_rcItem, FALSE); }